package trucotdd.carta;

public final class Carta implements Comparable<Carta> {

	private final Naipe naipe;
	private final Valor valor;

	@SuppressWarnings("unused")
	private Carta() {
		this.naipe = null;
		this.valor = null;
	}

	public Carta(final Naipe _naipe, final Valor _valor) {
		if(_naipe==null || _valor==null){
			throw new IllegalArgumentException("Nem o naipe nem o valor da carta podem ser nulos");
		}
		this.naipe = _naipe;
		this.valor = _valor;
	}

	public Naipe getNaipe() {
		return naipe;
	}

	public Valor getValor() {
		return valor;
	}

	@Override
	public boolean equals(Object _obj) {
		if (_obj instanceof Carta) {
			Carta c = (Carta) _obj;
			return this.getNaipe().equals(c.getNaipe())
					&& this.getValor().equals(c.getValor());
		}
		return false;
	}

	@Override
	public String toString() {
		return this.getValor() + " de " + this.getNaipe();
	}

	@Override
	public int compareTo(Carta _carta) {
		if (this.getValor().getValor() > _carta.getValor().getValor()) {
			return 1;
		} else if (this.getValor().getValor() < _carta.getValor().getValor()) {
			return -1;
		} else {
			return 0;
		}
	}

	public boolean isValida() {
		return this.getNaipe()!=null && this.getValor()!=null;
	}

}
